﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Ordens.Presenter;
using Sinacor.UI.Bovespa.Ordens.Model;
using Sinacor.Infra.UI.Common;
using Sinacor.UI.Bovespa.Clientes.Presenter;
using Sinacor.UI.Bovespa.Clientes.View.SmartClient;


namespace Sinacor.UI.Bovespa.Ordens.View.SmartClient
{
    /// <summary>
    /// Interaction logic for DistribuicaoOrdemDigitacao.xaml
    /// </summary>
    public partial class DistribuicaoOrdemDigitacao : SinacorWindow, IDigitacaoDistribuicaoOrdem
    {
        #region Eventos

        private bool moduloPlus = false;
        private void DistribuicaoOrdemDigitacao_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.CriarPopUp();
            moduloPlus = this.CheckModulePlusLicense();
            this.ColunasGridDigitacaoKernelPlus();
            this.dtgOrdens.NewItemType = typeof(Model.Ordem);
            this.dtgNegocio.NewItemType = typeof(Model.Negocio);
            //this.InicializarVariaveis();
            //this.dtgDistribuicao.NewItemType = typeof(Model.BaseDigitacao);
            //  testeInicial();

        }
        #endregion

        #region Constructor
        public DistribuicaoOrdemDigitacao()
        {
            InitializeComponent();
            this.AfterInitialize += new RoutedEventHandler(DistribuicaoOrdemDigitacao_AfterInitialize);
            // ColunasGridDigiacaoKernelPlus();
        }
        #endregion

        #region Propriedades
        #region  Privada
        private DigitacaoDistribuicaoOrdem _presenter;
        private IDigitacaoDistribuicaoOrdem _ipresenter;
        private Model.Parameter.ConsultarOrdemDigitacao _consultarOrdemDigitacao;
        private Model.Parameter.ConsultarNegocioLoteDigitacao _consultarNegocioLoteDigitacao;
        private SinacorPopup popup = new SinacorPopup();
        private ValidationResult _validationResult;
        private object _objValidacao;
        private bool inserido = false;
        private bool habilitarColunas = false;
        
        #endregion
        #region Publica
        public IDigitacaoDistribuicaoOrdem Ipresenter
        {
            get { return _ipresenter; }
            set { _ipresenter = value; }
        }
        public DigitacaoDistribuicaoOrdem Presenter
        {
            get { return _presenter; }
            set { _presenter = value; }
        }
        public Model.Parameter.ConsultarOrdemDigitacao ConsultarOrdemDigitacao
        {
            get { return _consultarOrdemDigitacao; }
            set { _consultarOrdemDigitacao = value; }
        }
        public Model.Parameter.ConsultarNegocioLoteDigitacao ConsultarNegocioLoteDigitacao
        {
            get { return _consultarNegocioLoteDigitacao; }
            set { _consultarNegocioLoteDigitacao = value; }
        }

        #endregion
        #endregion

        #region Metodos
        #region Private

        #region CheckBoxs

        private void DesabilitaCheckBoxPrecoMedio()
        {
            checkBoxPrecoMedio.IsChecked = false;
            checkBoxPrecoMedio.IsEnabled = false;
        }

        private void HabilitaPrecoMedio()
        {
            this.checkBoxPrecoMedio.IsEnabled = (Presenter.TipoOrdemDistribuicao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP);

        }

        #endregion

        #region radioButommTipoDigitacao

        private void StatusValueRadioButtomDistribuicaoDireto(bool status)
        {
            radioButtomDireto.IsChecked = status;
            radioButtomDireto.IsEnabled = status;

        }

        private void StatusValueRadioButtomPercentual(bool status)
        {
            radioButtomPercentual.IsChecked = status;
            radioButtomPercentual.IsEnabled = status;
        }

        private void StatusValueRadioButtomPrecoMedio(bool status)
        {
            radioButtomPrecoMedio.IsEnabled = status;
            radioButtomPrecoMedio.IsChecked = status;
        }

        private void HabilitarRadioButtomDistribuicaoDireto(bool status)
        {
            radioButtomDireto.IsEnabled = status;
        }

        private void HabilitarRadioButtomPercentual(bool status)
        {
            radioButtomPercentual.IsEnabled = status;
        }

        private void HabilitarRadioButtomPrecoMedio(bool status)
        {
            radioButtomPrecoMedio.IsEnabled = status;
        }

        private void radioButtomDireto_Checked(object sender, RoutedEventArgs e)
        {
            _presenter.blDireto = true;
            _presenter.AtualizarQtdCasada(); 
            configurarColuna();
            checkBoxPrecoMedio.IsEnabled = false;
            this.VerificaDesabilitarControleCheck();
        }

        private void radioButtomPercentual_Checked(object sender, RoutedEventArgs e)
        {
            _presenter.blPercentual = true;
            _presenter.AtualizarQtdCasada();
            configurarColuna();
            checkBoxPrecoMedio.IsEnabled = false;
            this.VerificaDesabilitarControleCheck();
        }

        private void radioButtomPrecoMedio_Checked(object sender, RoutedEventArgs e)
        {
            _presenter.blPrecoMedio = true;
            _presenter.AtualizarQtdCasada(); 
            configurarColuna();
            this.checkBoxPrecoMedio.IsEnabled = (Presenter.TipoOrdemDistribuicao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP);  
            this.VerificaDesabilitarControleCheck();
        }

        private void configurarColuna()
        {

            if (_presenter.Derivativo && _presenter.NaoDerivativo)
            {
                MercadoDerivativoNaoDerivativo();

            }
            else
            {
                if (_presenter.NaoDerivativo)
                {
                    MercadoNaoDerivativo();
                    

                }
                else
                {

                    MercadoDerivativo();

                }

            }
            dtgDistribuicao.Columns["Quantidade"].Visible =!(bool) radioButtomPercentual.IsChecked;
            dtgDistribuicao.Columns["PercentualDistribuicao"].Visible = ((bool)radioButtomPrecoMedio.IsChecked || (bool)radioButtomDireto.IsChecked) ? false:true;
            dtgDistribuicao.Columns["Preco"].Visible = ((bool)radioButtomPercentual.IsChecked || (bool) radioButtomPrecoMedio.IsChecked) ? false:true;
        }
        #endregion

        #region DataGrids
    private void ColunasLotesDigitados(string strColuna, bool bHabiliata)
        {
            dtgDistribuicao.Columns[strColuna].AllowInsert = bHabiliata;
            dtgDistribuicao.Columns[strColuna].AllowUpdate = bHabiliata;
            dtgDistribuicao.UpdateLayout(); 


        }

        private void OcultarColunasLotesDigitados(string strColuna, bool bHabiliata)
        {
            dtgDistribuicao.Columns[strColuna].Visible = bHabiliata;
            
        }

        private void ColunasLotesDigitados(List<string> strColuna, bool bHabiliata)
        {

            foreach (string colunas in strColuna)
            {
                ColunasLotesDigitados(colunas, bHabiliata);

            }
        }

        private void dtgDistribuicao_InsertEnded(object sender, ItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if ((RegAtual.TipoLiquidacao == null ||RegAtual.TipoLiquidacao == Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal) && !Presenter.Derivativo )
                {
                        RegAtual.CodigoClienteCustodia = null;
                        RegAtual.CodigoAgenteCustodia = null;
                        RegAtual.DigitoClienteCustodiaDigitacao = null;
                }
                RegAtual.UtilizaContaInvestimento = checkBoxContaInvestimento.IsChecked;
                _presenter.AtualizaValores();
                this.verificarMultiploLote(); 

            }
            dtgDistribuicao.SelectedIndex = -1; 
            inserido = false;
            Presenter.HabilitarConsultaCliente(false); 
            

        }

        private void dtgDistribuicao_Saved(object sender, ItemsEventArgs e)
        {
            this.ClearServiceErrors();
            this.ShowUserWaitingProcess();
           
            if (this.Presenter.ListDigitacao != null)
            {
                this.Presenter.bErro = false; 
                ModelCollection<Model.BaseDigitacao> lstExclusao = this._presenter.ListDigitacao.GetDeleted();
                ModelCollection<Model.BaseDigitacao> lstInclusao = this._presenter.ListDigitacao.GetInserted();

                if (((ModelCollection<Model.BaseDigitacao>)this._presenter.ListDigitacao.GetChanged()).Count > 0)
                {
                    
                    this._presenter.Excluir();

                }

                else if (((ModelCollection<Model.BaseDigitacao>)this._presenter.ListDigitacao.GetChanged()).Count > 0)
                {
                    if (!this.Presenter.bErro) 
                        this._presenter.SalvarGridDigitacao();
                }
                if (!this.Presenter.bErro )
                this._presenter.AtualizaValores();

            }
            inserido = false; 
            this.HideUserWaitingProcess();
        }

        private void dtgDistribuicao_BeingInserted(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid )
            {
                this.ClearServiceErrors(); 
                this.Presenter.retorno = null; 
                inserido = true;
                this.ShowUserWaitingProcess();
                if (radioButtomDireto.IsChecked == false && radioButtomPercentual.IsChecked == false && radioButtomPrecoMedio.IsChecked == false)
                {
                    this.ShowError("Bovespa.Ordens.Message.TipoDistribuicaoNaoSelecionada");
                    e.Cancel = true;
                    return;
                }
                //if (this._presenter.NaoDerivativo == false && this._presenter.Derivativo == true)
                //{
                _presenter.ConsultarMenorCarteria();
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if (_presenter.CarteiraMercado != null)
                    RegAtual.CodigoCarteira = _presenter.CarteiraMercado.CodigoCarteira;
                else
                    RegAtual.CodigoCarteira = 0;
                //   dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
                //}

                this.AlterarStatusControle();
                _presenter.VerificaPermissaoUsuario();
                this.ColunasDiscricionarios();

                dtgDistribuicao.SelectedIndex = -1;
                
                if (this._presenter.ContemNovoMercado)
                {
                    ((Model.BaseDigitacao)this.dtgDistribuicao.EditItem).ApelidoCliente = this._presenter.ModelClienteOrdem.Apelido;
                    this.dtgDistribuicao.Columns["Cliente"].AllowInsert = false;
                    if (Presenter.blConsultaCVM == true)
                    {
                        Presenter.ConsultarClienteCVM(this._presenter.ModelClienteOrdem.Apelido);
                    }
                    else
                    {
                        Presenter.ConsultarClienteApelido(this._presenter.ModelClienteOrdem.Apelido, true);
                    }
                    Presenter.ApelidoAtual = this._presenter.ModelClienteOrdem.Apelido;
                    Presenter.ValidarCliente(false);
                }
                else 
                {
                    this.dtgDistribuicao.Columns["Cliente"].AllowInsert = true;
                }

                this.HideUserWaitingProcess();
            }
        }

        private void HabilitaGridDigitacaoDireto()
        {
            ColunasLotesDigitados("Preco", true);
            ColunasLotesDigitados("Quantidade", true);
            if (Presenter.pLoteOrdem.Count <= 1)
                ColunasLotesDigitados("Carteira", true);
            else
               OcultarColunasLotesDigitados("Carteira", false);
            DesabilitaCheckBoxPrecoMedio();
        }

        private void HabilitaGridPrecoMedio()
        {

            ColunasLotesDigitados("Quantidade", true);
            ColunasLotesDigitados("Preco", false);
            if (Presenter.pLoteOrdem.Count <= 1)
            ColunasLotesDigitados("Carteira", true);
            else
                OcultarColunasLotesDigitados("Carteira", false);
            ColunasLotesDigitados("PercentualDistribuicao", false);
            HabilitaPrecoMedio();
        }

        private void HabilitaGridDigitacaoPercentual()
        {
            if ( Presenter.pLoteOrdem.Count <=1) 
                ColunasLotesDigitados("Carteira", true);
            else
                OcultarColunasLotesDigitados("Carteira", false);

            ColunasLotesDigitados("PercentualDistribuicao", true);
            DesabilitaCheckBoxPrecoMedio();

        }

        private void DesabilitarColunasInsercao()
        {
            SinacorInt32TextBox auxSinacorInt32;
            ColunasLotesDigitados("Preco", false);
            ColunasLotesDigitados("Quantidade", false);
            ColunasLotesDigitados("PercentualDistribuicao", false);
            auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtClienteInstitucional");
            if (auxSinacorInt32 != null)
            {
                auxSinacorInt32.IsEnabled = false;
                auxSinacorInt32.UpdateLayout();
            }
            auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtUsuarioInstitucional");
            if (auxSinacorInt32 != null)
            {
                auxSinacorInt32.IsEnabled = false;
                auxSinacorInt32.UpdateLayout();
            }
            //auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtDigitoVerificadorClienteInst");
            //if (auxSinacorInt32 != null)
            //{
            //    auxSinacorInt32.IsEnabled = false;
            //    auxSinacorInt32.UpdateLayout();
            //}
        }

        private void DesabilitaColunasGridDigitacao()
        {
            ColunasLotesDigitados("Carteira", false);

            ColunasLotesDigitados("Cliente", false);
            ColunasLotesDigitados("ClienteInstitucional", false);
           // ColunasLotesDigitados("DigitoVerificadorCliente", false);
            ColunasLotesDigitados("DigitoVerificadorClienteInstitucional", false);
            ColunasLotesDigitados("TipoLiquidacao", false);
            ColunasLotesDigitados("UsuarioInstitucional", false);
            ColunasLotesDigitados("PercentualDistribuicao", false);
            ColunasLotesDigitados("Preco", false);
            ColunasLotesDigitados("Quantidade", false);
            DesabilitaCheckBoxPrecoMedio();


        }
        private void txtTipoLiquidacao_PreviewKeyUp(object sender, KeyEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                switch (e.Key.ToString().ToUpper())
                {
                    case "SPACE":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal;
                        break;
                    case "C":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Custodiante;
                        break;
                    case "NUMPAD4":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoIV;
                        break;
                    case "D4":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoIV;
                        break;
                    case "NUMPAD5":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoV;
                        break;
                    case "D5":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoV;
                        break;


                }

                //dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }

        }

        private void dtgDistribuicao_SavedAll(object sender, ItemsEventArgs e)
        {


            Presenter.HabilitarConsultaCliente(false); 
            if (Presenter.pLoteOrdem.Count > 1)
                this.Close(); 
           
            if (this.Presenter.blPercentual &&
                    this._presenter.validarPercentualTotalDigitado(null, null ) && !this.Presenter.bErro 
               )
            {
                this.Close();
            }


            else
                if (!this.Presenter.bErro)
                {
                    if (this._presenter.validarQuantidadeTotalDigitado())
                    {
                        this.Close();
                    }

                    else
                    {
                        this.Presenter.CarregarDigitacao();

                    }
                }
            this.VerificaDesabilitarControleCheck(); 
            this.verificarMultiploLote(); 
        }

        #endregion

        #region Validation
        private void ValorValidationRule_Carteira(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
             if (this.dtgDistribuicao.EditItem != null)
            {
                if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.AdministradoConcorrente &&
                    _presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                {

                    // if (_presenter.pLoteOrdem.Count > 1)
                    //{
                    e.Result = ValidationResult.ValidResult;
                }

                else
                {
                    this.ShowUserWaitingProcess();

                    if (e.Value != null)
                    {
                        if (_presenter.ValidarCarteira(Convert.ToInt32(e.Value)) == false)
                            e.Result = new ValidationResult(false, null);
                        else
                            e.Result = ValidationResult.ValidResult;
                    }
                    else
                        e.Result = ValidationResult.ValidResult;

                    this.HideUserWaitingProcess();
                }
            }
        }

        private void EventValidationRule_PrecoInformado(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                if (e.Value != null && _presenter.blPrecoMedio == false)
                {
                    if (_presenter.VerificarValorDigitado(Convert.ToDecimal(e.Value)) == false)
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else
                    e.Result = ValidationResult.ValidResult;
                this.HideUserWaitingProcess();
            }
        }

        private void EventValidationRule_Quantidade(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                if (e.Value == null && (radioButtomDireto.IsChecked == true || radioButtomPrecoMedio.IsChecked == true))
                {
                    e.Result = new ValidationResult(false, null);
                }
                else if (e.Value.ToString() == "0" && (radioButtomDireto.IsChecked == true || radioButtomPrecoMedio.IsChecked == true))
                {
                    e.Result = new ValidationResult(false, null);
                }
            }

        }
        private void EventValidationRule_QTDDestinadaCliente(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                e.Result = ValidationResult.ValidResult;

                if (e.Value != null && RegAtual.PrecoInformado != null && (radioButtomDireto.IsChecked == true))
                {
                    bool novo = (dtgDistribuicao.EditIndex != -1);

                    if (!_presenter.ValidaQtdTotal(RegAtual, Convert.ToDecimal(e.Value), novo,dtgDistribuicao.EditSourceIndex ))
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else if (e.Value != null && radioButtomPrecoMedio.IsChecked == true)
                {

                    bool novo = (dtgDistribuicao.EditIndex != -1);

                    if (_presenter.ValidaQtdTotal(Convert.ToDecimal(e.Value), RegAtual.QuantidadeDestinadaCliente, novo,dtgDistribuicao.EditSourceIndex) == false)
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;

                }


                else
                {
                    e.Result = ValidationResult.ValidResult;

                }

                this.HideUserWaitingProcess();
            }

        }

        private void EventValidationRule_txtPorcentualMaiorZero(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;

            if (e.Value == null || Convert.ToDecimal(e.Value) <= 0)
            {
                e.Result = new ValidationResult(false, null);
            }
        }

        private void EventValidationRule_MultQTDDestinadaCliente(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                if (e.Value != null && radioButtomDireto.IsChecked == true)
                {
                    if (_presenter.VerificaMultiploQtd(Convert.ToDecimal(e.Value)) == false)
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else
                    e.Result = ValidationResult.ValidResult;


                if (e.Value != null && !(bool)radioButtomPercentual.IsChecked)
                {
                    if (!_presenter.VerificaMultiploQtd(Convert.ToDecimal(e.Value)))
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                this.HideUserWaitingProcess();
            }
        }

        private void EventValidationRule_Preco(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                if (radioButtomDireto.IsChecked == true)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    if (RegAtual.PrecoInformado == null)
                        e.Result = new ValidationResult(false, null);

                }
            }
        }
        private void EventValidationRule_txtPreco(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                if (radioButtomDireto.IsChecked == true)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    if (e.Value == null)
                        e.Result = new ValidationResult(false, null);
                }
            }
        }

        private void dtgDistribuicao_SavingAll(object sender, CancelItemsEventArgs e)
        {
            this.ShowUserWaitingProcess();
            this.ClearServiceErrors();
            if (this.Presenter.ListDigitacao != null)
            {
                this.Presenter.bErro = false; 

                ModelCollection<Model.BaseDigitacao> lstExclusao = this._presenter.ListDigitacao.GetDeleted();
                ModelCollection<Model.BaseDigitacao> lstInclusao = this._presenter.ListDigitacao.GetInserted();
               

                if (((ModelCollection<Model.BaseDigitacao>)this._presenter.ListDigitacao.GetChanged()).Count > 0)
                {
                    this._presenter.Excluir();
                  
                    this._presenter.VerificarDigitacao();

                  //  this._presenter.AtualizaValores();

                }

                e.Cancel = this.Presenter.bErro; 

                if (((ModelCollection<Model.BaseDigitacao>)this._presenter.ListDigitacao.GetInserted()).Count > 0 || ((ModelCollection<Model.BaseDigitacao>)this._presenter.ListDigitacao.GetChanged()).Count >0 )
                {
                    if (!this.Presenter.bErro)
                    {
                        if (this._presenter.SalvarGridDigitacao() == true)
                        {
                            this._presenter.ConsultarPosicaoCustodia();
                        }
                        else
                        {
                            e.Cancel = true;
                        }
                    }
                  //  this._presenter.AtualizaValores();
                }



                this.HideUserWaitingProcess();
            }
        }

        private void EventValidationRule_txtPorcentualDistribuicao(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                // && RegAtual.PrecoInformado != null
                if (e.Value != null && !(radioButtomDireto.IsChecked == true || radioButtomPrecoMedio.IsChecked == true))
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                    if (!_presenter.ValidaPercentual(Convert.ToDecimal(e.Value), RegAtual.PercentualDistribuido, dtgDistribuicao.EditSourceIndex ))
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else
                {
                    e.Result = ValidationResult.ValidResult;
                }
                this.HideUserWaitingProcess();
            }
        }

        private void EventValidationRule_txtPorcentualDistribuicaoMultiploQtd(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                // && RegAtual.PrecoInformado != null
                if (e.Value != null && !(radioButtomDireto.IsChecked == true || radioButtomPrecoMedio.IsChecked == true))
                {

                    if (!_presenter.VerificarPorcentagemMinMultiplo(Convert.ToDecimal(e.Value)))
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else
                {
                    e.Result = ValidationResult.ValidResult;
                }
                this.HideUserWaitingProcess();
            }
             
        }

        private Boolean ValidarQuantidadeDigitada()
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                if (_presenter.VerificaMultiploQtd(RegAtual.QuantidadeDestinadaCliente) == false)
                {
                    base.ShowError("Bovespa.Ordens.Message.ErroQtdIncompativel1");
                    this.dtgDistribuicao.CancelInsert();
                    this.HideUserWaitingProcess();
                    return false;
                }
                this.HideUserWaitingProcess();
            }
            return true;


        }

        private void EventValidationRule_txtPorcentualDistribuicaoValor(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (e.Value == null && radioButtomPercentual.IsChecked == true)
                {
                    e.Result = new ValidationResult(false, null);
                }
                else
                {
                    e.Result = ValidationResult.ValidResult;
                }
            }
        }

        private void EventValidationRule_ConsultaClienteCVM_Apelido(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();

                _validationResult = ValidationResult.ValidResult;
                if (e.Value != null)
                {

                    if (e.Value.ToString().Trim().Length > 0)
                    {
                        if (Presenter.blConsultaCVM == true)
                        {
                            Presenter.ConsultarClienteCVM(e.Value.ToString());
                        }
                        else
                        {
                            Presenter.ConsultarClienteApelido(e.Value.ToString(),true);

                            if (this._presenter.ModelClienteDigitacao == null)
                            {
                                SinacorInt16TextBox txtDigito = (SinacorInt16TextBox)ControlHelper.FindChild(this.dtgDistribuicao.GetInsertionRow(), "txtDigitoVerificador");
                                txtDigito.Value = null;
                                Sinacor.Infra.Common.Validation.ValidationError ResultError = new Sinacor.Infra.Common.Validation.ValidationError();
                                ResultError.ResourceKey = "Bovespa.Ordens.ExceptionMessage.ClienteOrdemLoteInvalido";
                                _validationResult = new ValidationResult(false, ResultError);
                            }
                        }
                    }
                }
                this.HideUserWaitingProcess();
                e.Result = _validationResult;
            }
        }

        private void dtgDistribuicao_UndidAll(object sender, ItemsEventArgs e)
        {
            this.ShowUserWaitingProcess();
            if (this.Presenter.ListDigitacao.Count == 0)
            {
                this.ShowUserWaitingProcess();
                HabilitaPrecoMedio();
                HabilitarRadioButtomDistribuicaoDireto(true);
                HabilitarRadioButtomPercentual(true);
                HabilitarRadioButtomPrecoMedio(true);
                this.DesabilitarColunasInsercao();
                this.HideUserWaitingProcess();


            }
            this.Presenter.AtualizaValores();
            this.verificarMultiploLote(); 
            this.HideUserWaitingProcess();
        }

        private void dtgDistribuicao_Undid(object sender, ItemsEventArgs e)
        {
            this.ShowUserWaitingProcess();
           
            if (this.Presenter.ListDigitacao.Count == 0)
            {
                this.ShowUserWaitingProcess();
                HabilitaPrecoMedio();
                HabilitarRadioButtomDistribuicaoDireto(true);
                HabilitarRadioButtomPercentual(true);
                HabilitarRadioButtomPrecoMedio(true);
                
                this.HideUserWaitingProcess();


            }
            else
            {

                this.Presenter.AtualizaValores(); 
            }
            this.ClearServiceErrors();


            Model.Enum.TipoDistribuicao tipoValidacao = new Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao(); 
            if ((bool)radioButtomPercentual.IsChecked ) 
                tipoValidacao = Model.Enum.TipoDistribuicao.Percentual ;  
            if ( (bool) radioButtomDireto.IsChecked )
                tipoValidacao = Model.Enum.TipoDistribuicao.Direto;

            if ((bool)radioButtomPrecoMedio.IsChecked)
                tipoValidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.PrecoMedio; 
                
            this.Presenter.ValidarSaldoMensagem(tipoValidacao ); 

            this.DesabilitarColunasInsercao();
            this.verificarMultiploLote(); 
            this.HideUserWaitingProcess();
            Presenter.HabilitarConsultaCliente(false); 

        }
        private void EventValidationRule_TipoLiquidacao(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                string valor = (e.Value.ToString().ToUpper());
                if ((valor != "") && (valor != "C") && (valor != "4") && (valor != "5") &&
                    (valor != "ANEXOIV") && (valor != "ANEXOV") && (valor != "NORMAL") && (valor != "CUSTODIANTE"))
                {
                    e.Result = new ValidationResult(false, null);
                }
            }
        }



        private void EventValidationRule_ValidarCodigoCliente(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            this.ClearServiceErrors(); 
            e.Result = ValidationResult.ValidResult;

            if (e.Value != null && e.Value.ToString() != Presenter.ApelidoAtual)
            {
                if (this.dtgDistribuicao.EditItem != null)
                {
                    this.ClearServiceErrors();
                    this.ShowUserWaitingProcess();
                    this._objValidacao = sender;
                    this.ShowUserWaitingProcess();
                    Presenter.ApelidoAtual = e.Value.ToString();
                    if (_validationResult == ValidationResult.ValidResult && e.Value != null && popup.IsOpen == false)
                    {

                        if (e.Value.ToString().Trim().Length > 0)
                        //&& e.Value.ToString() != ((Model.BaseDigitacao)this.dtgDistribuicao.EditItem).ApelidoCliente)
                        {
                            _validationResult = ValidationResult.ValidResult;
                            Presenter.ValidarCliente(false);
                            if (Presenter.bErro)
                                _validationResult = new ValidationResult(false, Presenter.retorno.Error);

                        }

                    }
                    else
                        _validationResult = ValidationResult.ValidResult;
                    this.HideUserWaitingProcess();
                    e.Result = _validationResult;
                    this.HideUserWaitingProcess();
                }


            }
            else
            {
                if (Presenter.bErro && Presenter.retorno !=null)
                {
                    _validationResult = new ValidationResult(false, Presenter.retorno.Error);
                    e.Result = _validationResult;
                }
            }
        }


        private void EventValidationRule_ValidarDigitoCliente(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                _validationResult = ValidationResult.ValidResult;

                if (e.Value != null)                                
                {

                    if (Presenter.ModelClienteDigitacao == null ||
                        ((Model.BaseDigitacao)this.dtgDistribuicao.EditItem).ApelidoCliente != Presenter.ModelClienteDigitacao.Apelido )
                    {
                        
                        Presenter.ConsultarClienteApelido (((Model.BaseDigitacao)this.dtgDistribuicao.EditItem).ApelidoCliente ,false );

                    }


                    if (Convert.ToInt32(e.Value) != _presenter.ModelClienteDigitacao.DigitoVerificador)
                    {

                        Sinacor.Infra.Common.Validation.ValidationError ResultError = new Sinacor.Infra.Common.Validation.ValidationError();
                        ResultError.ResourceKey = "Bovespa.Ordens.Message.DigitoClienteInvalido1";
                        _validationResult = new ValidationResult(false, ResultError);

                    }


                }


                this.HideUserWaitingProcess();
                e.Result = _validationResult;
            }
        }

        private void EventValidationRule_DigitoVerificadorClienteInst(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                this.ShowUserWaitingProcess();
                _validationResult = ValidationResult.ValidResult;
                int? CodigoUsuarioInstitucional = null;
                int? DigVerif = null;

                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if (RegAtual != null)
                {
                    if ((RegAtual.CodigoAgenteCustodia != null) && (RegAtual.CodigoAgenteCustodia.ToString().Length != 0))
                        CodigoUsuarioInstitucional = Convert.ToInt32(RegAtual.CodigoAgenteCustodia);
                    if (e.Value != null)
                        DigVerif = Convert.ToInt32(e.Value);
                    Presenter.ValidarDigitoVerifClienteInstitucional(RegAtual.CodigoClienteCustodia, CodigoUsuarioInstitucional, DigVerif);

                }
                this.HideUserWaitingProcess();
                e.Result = _validationResult;
            }
        }

        private void EventValidationRule_ReducaoAcrecimoTotalValor(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                if ((dtgDistribuicao.Columns["ReducaoAcrecimoTotal"].AllowInsert == true || dtgDistribuicao.Columns["ReducaoAcrecimoTotal"].AllowUpdate == true) && (e.Value != null))
                {
                    if (Presenter.ModelClienteDigitacao != null)
                    {
                        if (Presenter.ModelClienteDigitacao.PercentualTotal == 0)
                        {
                            if (Convert.ToDecimal(e.Value) < -100)
                            {
                                e.Result = new ValidationResult(false, null);
                            }
                        }
                        else
                        {
                            if (Convert.ToDecimal(e.Value) < 0)
                            {
                                e.Result = new ValidationResult(false, null);
                            }
                        }
                    }
                }
            }
        }

        private void EventValidationRule_ReducaoAcrecimoTotalDigiacao(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                if ((dtgDistribuicao.Columns["ReducaoAcrecimoTotal"].AllowInsert == true || dtgDistribuicao.Columns["ReducaoAcrecimoTotal"].AllowUpdate == true) && (e.Value == null))
                    e.Result = new ValidationResult(false, null);
                else
                    e.Result = ValidationResult.ValidResult;
            }
        }

        private void EventValidation_ClienteInstitucional(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {

                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if ((RegAtual.TipoLiquidacao != null) && (RegAtual.TipoLiquidacao.Value != Model.Enum.TipoLiquidacaoDistribuicao.Normal))
                {
                    if (e.Value != null && Convert.ToInt32(e.Value) != 0)
                        e.Result = new ValidationResult(true, null);
                    else
                        e.Result = new ValidationResult(false, null);
                }
                else if (e.Value != null)
                {
                    if (Convert.ToInt32(e.Value) == 0)
                        e.Result = new ValidationResult(true, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }
                else
                {
                    e.Result = ValidationResult.ValidResult;

                }
            }


        }

        private void EventValidation_Dolar(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                if (e.Value != null)
                {
                    if (Convert.ToDecimal(e.Value) <= 0)
                        e.Result = new ValidationResult(false, null);
                    else
                        e.Result = ValidationResult.ValidResult;
                }

            }

        }
        private void UsuarioInstitucional_Validating(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                e.Result = ValidationResult.ValidResult;
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if ((RegAtual.TipoLiquidacao != null && RegAtual.TipoLiquidacao != Model.Enum.TipoLiquidacaoDistribuicao.Normal) && (e.Value == null))
                    e.Result = new ValidationResult(false, null);
                else if ((RegAtual.TipoLiquidacao != null && RegAtual.TipoLiquidacao != Model.Enum.TipoLiquidacaoDistribuicao.Normal))
                    if (e.Value.ToString() == "0")
                        e.Result = new ValidationResult(false, null);
            }
        }


        private void txtTipoLiquidacao_LostFocus(object sender, RoutedEventArgs e)
        {

            if (this.dtgDistribuicao.EditItem != null)
            {

                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                this.ShowUserWaitingProcess();
                if (RegAtual != null)
                {
                    if (((System.Windows.Controls.TextBox)(e.Source)).Text == "")
                        RegAtual.TipoLiquidacao = Model.Enum.TipoLiquidacaoDistribuicao.Normal;

                    if (RegAtual.TipoLiquidacao != Model.Enum.TipoLiquidacaoDistribuicao.Normal && Presenter.Derivativo == false)
                    {
                        this.CamposInstitucionais(true);
                        if (RegAtual.TipoLiquidacao == Model.Enum.TipoLiquidacaoDistribuicao.AnexoIV || RegAtual.TipoLiquidacao == Model.Enum.TipoLiquidacaoDistribuicao.Custodiante)
                        {
                            if (this._presenter.ModelClienteDigitacao == null)
                                this._presenter.ConsultarClienteApelidoAlteracao(RegAtual.ApelidoCliente);

                            Presenter.ConsultarUsuarioClienteInstitucional();

                            this.ApresentarTipoLiquidacaoDadosUsuario(false);
                        }
                        else if (RegAtual.TipoLiquidacao == Model.Enum.TipoLiquidacaoDistribuicao.AnexoV)
                        {
                            Presenter.ConsultarClienteADR();
                        }
                    }
                    else if (Presenter.Derivativo == false)
                    {
                        RegAtual.CodigoClienteCustodia = null;
                        RegAtual.CodigoAgenteCustodia = null;
                        RegAtual.DigitoClienteCustodiaDigitacao = null;
                        this.CamposInstitucionais(false);

                        ///dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
                    }
                }
                this.HideUserWaitingProcess();
            }
        }
        private void ColunasDiscricionarios()
        {
            if (Presenter.blDiscricionarios == false)
            {
                if (checkBoxUtilizaCodigoCVM.IsChecked == false)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    RegAtual.CodigoCliente = _presenter.ModelClienteOrdem.Codigo;
                    RegAtual.ApelidoCliente = _presenter.ModelClienteOrdem.Apelido;
                    RegAtual.DigitoVerificadorCliente = _presenter.ModelClienteOrdem.DigitoVerificador;
                    _presenter.ConsultarClienteCodigo(RegAtual.CodigoCliente);
                    //dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProMperty);

                }
                ColunasLotesDigitados("Cliente", (bool)checkBoxContaInvestimento.IsChecked);
                //ColunasLotesDigitados("DigitoVerificadorCliente", (bool)checkBoxUtilizaCodigoCVM.IsChecked);

            }
            else
            {
                ColunasLotesDigitados("Cliente", true);
               // ColunasLotesDigitados("DigitoVerificadorCliente", true);

            }

        }

        private void ColunasDerivativas()
        {

            if (Presenter.pLoteOrdem.Count > 1)
            {
                habilitarColunas = false;
                OcultarColunasLotesDigitados("Carteira", habilitarColunas);
                ColunasLotesDigitados("Carteira", habilitarColunas);

            } 

            else

                habilitarColunas = (Presenter.Derivativo == false && Presenter.NaoDerivativo == true);
            OcultarColunasLotesDigitados("TipoLiquidacao", habilitarColunas);
            ColunasLotesDigitados("TipoLiquidacao", habilitarColunas);

            OcultarColunasLotesDigitados("ClienteInstitucional", habilitarColunas);
            ColunasLotesDigitados("ClienteInstitucional", habilitarColunas);
            OcultarColunasLotesDigitados("UsuarioInstitucional", habilitarColunas);
            ColunasLotesDigitados("UsuarioInstitucional", habilitarColunas);
            OcultarColunasLotesDigitados("DigitoVerificadorClienteInstitucional", habilitarColunas);
            ColunasLotesDigitados("DigitoVerificadorClienteInstitucional", habilitarColunas);

            dtgDistribuicao.UpdateTarget(SinacorDataGrid.VisibilityProperty);
            dtgDistribuicao.UpdateTarget(SinacorDataGrid.IsEnabledProperty);  

        }
        #endregion

        #region AlteraStatusControles

        private void AlteraStatusControle(bool Habilita)
        {
            if (this.Presenter.pLoteOrdem.Count == 1)
            {
                radioButtomDireto.IsEnabled = Habilita;
                radioButtomPercentual.IsEnabled = Habilita;
                radioButtomPrecoMedio.IsEnabled = Habilita;
            } 
        }

        private void AtivaDireto()
        {
            this.DesabilitaCheckBoxContaInvestimento();
            this.ColunasLotesDigitados("Preco", true);
            this.ColunasLotesDigitados("PercentualDistribuicao", false);
        }

        private void AtivaPercentual()
        {
            this.DesabilitaCheckBoxPrecoMedio();
            List<string> strColunas = new List<string>();
            strColunas.Add("Preco");
            strColunas.Add("Quantidade");
            this.ColunasLotesDigitados(strColunas, false);
            this.ColunasLotesDigitados("PercentualDistribuicao", true);
        }

        private void AtivaPrecoMedio()
        {
            this.HabilitaPrecoMedio();
            List<string> strColunas = new List<string>();
            strColunas.Add("Preco");
            strColunas.Add("PercentualDistribuicao");
            this.ColunasLotesDigitados(strColunas, false);
        }


        #endregion
        private void CarregarNegocio()
        {
            Presenter.CarregarGridNegocio();
            Presenter.CalculaPrecoMedio();

        }

        private void CarregarValidarCliente()
        {
            Presenter.CarregarClienteOrdem();
            Presenter.VerificaClienteBroker();

        }

        private void CriarPopUp()
        {
            popup.Content = FindResource("ClientesPopUpTemplate");
            popup.Header = "Clientes-CVM";
            popup.PlacementTarget = this.dtgDistribuicao;
            popup.Placement = System.Windows.Controls.Primitives.PlacementMode.Center;
            //popup.IsVisibleChanged += new DependencyPropertyChangedEventHandler(popup_IsVisibleChanged);
            popup.StaysOpen = true;
        }

        private void listBoxClientes_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            SinacorListBox list = (SinacorListBox)sender;

            if (list.SelectedItem != null)
            {
                Model.Cliente RegCliente = (Model.Cliente)list.SelectedItem;
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                Presenter.ConsultarClienteCodigo(RegCliente.Codigo);
                popup.IsOpen = false;
                //    checkBoxUtilizaCodigoCVM.IsChecked = false; 
                this._presenter.ValidarCliente(true);
            }

        }

        private void PesquisaCliente_Click(object sender, RoutedEventArgs e)
        {

            this.AbrirPesquisaCliente();

        }

        private void AbrirPesquisaCliente()
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if (RegAtual != null)
                {
                    Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente filtro = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente();
                    filtro.Apelido = RegAtual.ApelidoCliente;

                    this.ShowUserWaitingProcess();
                    PesquisaClientes pesquisaCliente = new PesquisaClientes();
                    pesquisaCliente.Owner = this;
                    pesquisaCliente.SetMenuHeader("Bovespa.Clientes.Label.PesquisaClientesMenuHeader");
                    pesquisaCliente.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.DistribuicaoOrdemLote, filtro);
                    pesquisaCliente.ShowDialog();
                    this.HideUserWaitingProcess();
                    if (pesquisaCliente.PesquisaClienteModel.Codigo > 0)
                    {
                        Presenter.ConsultarClienteApelido(pesquisaCliente.PesquisaClienteModel.Apelido.ToString(),true);
                    }
                }
                else
                {
                    this.ShowError("Bovespa.Ordens.Message.ErroPesquisaCliente");

                }
            }
        }

        private void dtgDistribuicao_CancelingInsert(object sender, CancelItemEventArgs e)
        {
            if (this.Presenter.ListDigitacao.Count == 0)
            {
                this.ShowUserWaitingProcess();
                HabilitaPrecoMedio();
                HabilitarRadioButtomDistribuicaoDireto(true);
                HabilitarRadioButtomPercentual(true);
                HabilitarRadioButtomPrecoMedio(true);

                this.DesabilitarColunasInsercao();
                this.HideUserWaitingProcess();
                this.VerificaDesabilitarControleCheck();
                this.verificarMultiploLote();
            }
            inserido = false;
            this.Presenter.HabilitarConsultaCliente(false); 
            

        }

        private void txtGridQTDDestinadaCliente_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (e.Key == Key.AbntC2 || e.Key == Key.OemPeriod)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    //     RegAtual.QuantidadeDestinadaCliente = (decimal?)((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox<Decimal?>)(sender)).Value * 1000000;
                    ((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value = (decimal?)((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value * 1000000;
                    //dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
                }
                else if (e.Key == Key.K)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    ((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value = (decimal?)((Sinacor.Infra.UI.Controls.SmartClient.SinacorDecimalTextBox)(sender)).Value * 1000;
                   // dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);

                }
            }
        }
        private void txtTipoLiquidacao_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;



                switch (e.Key.ToString().ToUpper())
                {
                    case "SPACE":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal;
                        break;
                    case "C":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Custodiante;
                        break;
                    case "NUMPAD4":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoIV;
                        break;
                    case "NUMPAD5":
                        RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.AnexoV;
                        break;

                }

              //  dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }


        private void CamposInstitucionais(bool blHabilitar)
        {

            SinacorInt32TextBox auxSinacorInt32;

            if (dtgDistribuicao.EditIndex == -1)
            {
               

                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtClienteInstitucional");
                if (auxSinacorInt32 != null)
                {
                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP )

                        auxSinacorInt32.IsEnabled =false;

                    else
                        auxSinacorInt32.IsEnabled = blHabilitar;

                    auxSinacorInt32.UpdateLayout();
                }
                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtUsuarioInstitucional");
                if (auxSinacorInt32 != null)
                {
                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)

                        auxSinacorInt32.IsEnabled = false;

                    else
                        auxSinacorInt32.IsEnabled = blHabilitar;

                    auxSinacorInt32.UpdateLayout();
                }
                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtDigitoVerificadorClienteInst");
                if (auxSinacorInt32 != null)
                {
                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                    {
                        auxSinacorInt32.IsEnabled = false;
                        auxSinacorInt32.IsRequired = false;
                    }
                    else
                    {
                        auxSinacorInt32.IsEnabled = blHabilitar;
                        auxSinacorInt32.IsRequired = blHabilitar;
                        auxSinacorInt32.RequiredErrorMessage = "Bovespa.Ordens.Message.DigitoClienteObrigatorio";
                    }
                    auxSinacorInt32.UpdateLayout();
                }
            }

            else
            {
                
                
                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtClienteInstitucional");
                if (auxSinacorInt32 != null)
                {
                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP   )

                        auxSinacorInt32.IsEnabled = false;

                    else
                        auxSinacorInt32.IsEnabled = blHabilitar;

                    auxSinacorInt32.UpdateLayout();
                }
                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtUsuarioInstitucional");
                if (auxSinacorInt32 != null)
                {

                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)

                        auxSinacorInt32.IsEnabled = false;

                    else
                        auxSinacorInt32.IsEnabled = blHabilitar;

                    auxSinacorInt32.UpdateLayout();
                }
                auxSinacorInt32 = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtDigitoVerificadorClienteInst");
                if (auxSinacorInt32 != null)
                {
                    if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)

                        auxSinacorInt32.IsEnabled = false;

                    else
                        auxSinacorInt32.IsEnabled = blHabilitar;
                    
                    auxSinacorInt32.UpdateLayout();
                } 


            }
        }




        private void InicializarVariaveis()
        {
            this.Presenter = new DigitacaoDistribuicaoOrdem(this);
            this.ModuleId = "ORD";
            this.DataContext = this.Presenter;
        }

        private void IndicadorLiquidacaoExternoCliente_Validating(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (e.Value != null)
                {
                    e.Result = ValidationResult.ValidResult;
                    string valor = (e.Value.ToString().ToUpper());
                    if ((valor != "") && (valor != "S") && (valor != "N"))
                    {

                        e.Result = new ValidationResult(false, null);
                    }



                }
                else
                {
                    e.Result = ValidationResult.ValidResult;

                }
            }
        }


        private void txtApelidoCliente_LostFocus(object sender, RoutedEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Presenter.blConsultaCVM = false;
                this.Presenter.blInserir = true;
                
            }
        }

        private void txtApelidoCliente_GotFocus(object sender, RoutedEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (checkBoxUtilizaCodigoCVM.IsChecked == true)
                    Presenter.blConsultaCVM = true;
                base.ClearServiceErrors();
                this.Presenter.blInserir = false;
            }
        }

        //private void txtApelidoCliente_LostFocus_1(object sender, RoutedEventArgs e)
        //{
        //    if (this.dtgDistribuicao.EditItem != null)
        //    {
        //        Presenter.blConsultaCVM = false;
        //        this.Presenter.blInserir = true;
        //        Presenter.carregarDadosApelido();
        //    }
        //}

        private void txtIndicadorLiquidacaoExternoCliente_LostFocus(object sender, RoutedEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                if (((System.Windows.Controls.TextBox)(e.Source)).Text == "S" || ((System.Windows.Controls.TextBox)(e.Source)).Text == "N")
                    RegAtual.IndicadorNaoLiquidacao = ((System.Windows.Controls.TextBox)(e.Source)).Text.ToUpper();

                //dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }

        }

        private void dtgDistribuicao_UpdateBegun(object sender, ItemEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (e.OriginalSource is BaseRow)
                {
                    Presenter.HabilitarConsultaCliente(true);

                    this.ColunasLotesDigitados("DigitoVerificadorCliente", this.Presenter.HabilitarDigitacaoDigitoCliente);
                    
                    if (dtgDistribuicao.GetEditRow() != null)
                    {
                        SinacorInt16TextBox txtDigitoVerificador = new SinacorInt16TextBox();

                        txtDigitoVerificador = (SinacorInt16TextBox)ControlHelper.FindChild(
                                            dtgDistribuicao.GetEditRow(),
                                            "txtDigitoVerificador");

                        if (txtDigitoVerificador != null)
                        {
                            txtDigitoVerificador.IsEnabled = this.Presenter.HabilitarDigitacaoDigitoCliente;
                            txtDigitoVerificador.IsRequired = this.Presenter.HabilitarDigitacaoDigitoCliente;

                            if (this.Presenter.HabilitarDigitacaoDigitoCliente)
                            {
                                txtDigitoVerificador.Value = null;
                                txtDigitoVerificador.RequiredErrorMessage = "Bovespa.Ordens.Message.DigitoClienteObrigatorio";
                            }

                            txtDigitoVerificador.UpdateTarget(SinacorInt16TextBox.IsEnabledProperty);
                        }
                    }
                }
            }
        }
        #endregion

        #region Public

        public void ErroNaPesquisaCliente(Sinacor.Infra.Common.Validation.ValidationError error)
        {
            //if (this.dtgDistribuicao.EditItem != null)
            {
                _validationResult = new ValidationResult(false, error);
            }
        }

        public void InformarErroCodigoCliente(Sinacor.Infra.Common.Validation.ValidationError error)
        {
           // if (this.dtgDistribuicao.EditItem != null)
            {
                _validationResult = new ValidationResult(false, error);
            }

        }

        public void InformarErroDigVerifClienteInst(Sinacor.Infra.Common.Validation.ValidationError error)
        {
          //  if (this.dtgDistribuicao.EditItem != null)
            {
                _validationResult = new ValidationResult(false, error);
            }

        }

        public void MostrarMensagemErroValidacaoCliente(Sinacor.Infra.Common.Validation.ValidationError error)
        {
            base.ShowError(error.ResourceKey);

        }

    public Model.Enum.TipoDistribuicao VerificaTipoDistribuicao()
        {
            Model.Enum.TipoDistribuicao tipoDistrib = new Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao();
            if (radioButtomDireto.IsChecked == true)
            {
                tipoDistrib = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.Direto;
            }
            else if (radioButtomPercentual.IsChecked == true)
            {
                tipoDistrib = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.Percentual;
            }
            else if (radioButtomPrecoMedio.IsChecked == true)
            {
                if (checkBoxPrecoMedio.IsChecked == true)
                    tipoDistrib = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.PrecoMedioPorVolume;
                else
                    tipoDistrib = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.PrecoMedio;

            }
            else if (checkBoxPrecoMedio.IsChecked == true)
            {
                tipoDistrib = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoDistribuicao.PrecoMedioPorVolume;

            }
            return tipoDistrib;
        }

        #region ApresentarDadosPresenter
        public void ApresentarGridOrdem()
        {
            dtgOrdens.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void ApresentarGridNegocio()
        {
            dtgNegocio.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
       }

        public void ApresentarDistribuicao()
        {
            dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);

        }

        public void ApresentarPrecoMedio()
        {
            PrecoMedio1.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
        }

        public void ApresentarValores()
        {

            txtPercentualCasado.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtPercentualDigitado.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeCasada.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeCasadaAnexoIV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeCasadaAnexoV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeCasada.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeDigitada.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeDigitadaAnexoIV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtQuantidadeDigitadaAnexoV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            TxtSaldo.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtSaldoAnexoIV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtSaldoAnexoV.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            txtSaldoPercentual.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            dtgNegocio.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void ApresentarPopupCliente()
        {
            popup.IsOpen = true;
        }

        public void ApresentarCliente()
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                RegAtual.CodigoCliente = _presenter.ModelClienteDigitacao.Codigo;
                RegAtual.ApelidoCliente = _presenter.ModelClienteDigitacao.Apelido;
                if (RegAtual.PercentualAcrescimo == null)
                    RegAtual.PercentualAcrescimo = 0;
                //RegAtual.DigitoVerificadorCliente = _presenter.ModelClienteDigitacao.DigitoVerificador;
                // RegAtual.CodigoClienteCustodia = _presenter.ModelClienteDigitacao.CodigoClienteInstitucional;
                dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }

        // <summary>
        /// Carrega o dígito do cliente na grid de digitação.
        /// </summary>
        public void ApresentarDigitoCliente()
        {

            if (this.dtgDistribuicao.EditItem != null)
            {
               // if (inserido)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                    if (!this.Presenter.HabilitarDigitacaoDigitoCliente || Presenter.ContemNovoMercado)
                    {
                        RegAtual.DigitoVerificadorCliente = _presenter.ModelClienteDigitacao.DigitoVerificador;
                    }
                    inserido = false;
                }
            }
        }

        public void ApresentarTipoLiquidacaoDadosUsuario(bool blAlterarTipoLiquidacao)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                //bool blAlterarTipoLiquidacao
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;

                if (this.Presenter.ModelAgenteCustodia != null && this.Presenter.ModelAgenteCustodia.DigitoClienteCustodiante != null)
                {
                    if (blAlterarTipoLiquidacao == true && _presenter.TipoOrdemDistribuicao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP )
                        RegAtual.TipoLiquidacao = Model.Enum.TipoLiquidacaoDistribuicao.Custodiante;
                    this.CamposInstitucionais(true);


                    RegAtual.CodigoAgenteCustodia = this.Presenter.ModelAgenteCustodia.CodigoCustodiante.ToString();
                    RegAtual.DigitoClienteCustodiaDigitacao = this.Presenter.ModelAgenteCustodia.DigitoClienteCustodiante;
                    RegAtual.CodigoClienteCustodia = this.Presenter.ModelAgenteCustodia.CodigoClienteCustodiante;

                }
                else if (this.Presenter.ModelAgenteCustodia != null && _presenter.ModelUsuarioInstitucional.CodigoUsuarioInstitucional != null)
                {
                    if (blAlterarTipoLiquidacao == true && _presenter.TipoOrdemDistribuicao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                        RegAtual.TipoLiquidacao = Model.Enum.TipoLiquidacaoDistribuicao.Custodiante;
                    this.CamposInstitucionais(true);

                    RegAtual.CodigoAgenteCustodia = this.Presenter.ModelUsuarioInstitucional.CodigoUsuarioInstitucional.ToString();
                    RegAtual.DigitoClienteCustodiaDigitacao = this.Presenter.ModelUsuarioInstitucional.DigitoClienteInstitucional;
                    RegAtual.CodigoClienteCustodia = this.Presenter.ModelUsuarioInstitucional.CodigoClienteInstitucional;
                }
               // dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }
        public void ApresentarTipoLiquidacaoNormal()
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                //bool blAlterarTipoLiquidacao
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
               
                    RegAtual.CodigoAgenteCustodia = null;
                    RegAtual.DigitoClienteCustodiaDigitacao = null;
                    RegAtual.CodigoClienteCustodia = null;
                    RegAtual.TipoLiquidacao = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal;
                    this.CamposInstitucionais(false);
               
            }
        
        }
        public void ApresetarClienteADR()
        {

            if (this.dtgDistribuicao.EditItem != null)
            {
                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                RegAtual.CodigoAgenteCustodia = Presenter.ModelClienteADR.CodigoCustodianteADR.ToString();
                RegAtual.CodigoClienteCustodia = Presenter.ModelClienteADR.CodigoCliente;
                RegAtual.DigitoClienteCustodiaDigitacao = Presenter.ModelClienteADR.DigitoCliente;
                this.CamposInstitucionais(true);
               // dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }

        public void CarregaOrdens(ModelCollection<Model.Ordem> pOrdem, DateTime pDataPregao, Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao ptipoOrdemDistribuicao )
        {

            this.ShowUserWaitingProcess();
            this.InicializarVariaveis();
            this.dtgOrdens.NewItemType = typeof(Model.Ordem);
            this.dtgNegocio.NewItemType = typeof(Model.Negocio);
            this.dtgDistribuicao.NewItemType = typeof(Model.BaseDigitacao);
            Presenter.DataPregao = pDataPregao;
            Presenter.CarregarGridOrdem(pOrdem, ptipoOrdemDistribuicao);
            if (pOrdem.Count > 1)
                AtivaPercentual(); 
            this.CarregarValidarCliente();
            this.CarregarNegocio();
            Presenter.HabilitarConsultaCliente(false); 
            Presenter.VerificaTipoMercado();
            Presenter.CarregarDigitacao();
            Presenter.VerificaDiscricionario();
            Presenter.AtualizaValores();
            VerificaDesabilitarControleCheck();
            this.ColunasDerivativas(); 
            this.verificarMultiploLote(); 
            this.HideUserWaitingProcess();


        }

        private void verificarMultiploLote()
        {
 	       if (this.Presenter.pLoteOrdem.Count >1) 
           {
               checkBoxPrecoMedio.IsEnabled =false; 
               radioButtomDireto.IsEnabled  =false; 
               radioButtomPrecoMedio.IsEnabled =false;
               radioButtomPercentual.IsChecked = true;
           }
        }



        private void VerificaDesabilitarControleCheck()
        {
            if (_presenter.ListDigitacao.Count > 0 && _presenter.pLoteOrdem.Count ==1)
            {

                if ((bool)radioButtomPercentual.IsChecked)
                {
                    radioButtomDireto.IsChecked = radioButtomPrecoMedio.IsChecked = !radioButtomPercentual.IsChecked;
                    radioButtomDireto.IsEnabled = radioButtomPrecoMedio.IsEnabled = !radioButtomPercentual.IsEnabled;

                }

                if ((bool)radioButtomDireto.IsChecked)
                {
                    radioButtomPercentual.IsChecked = radioButtomPrecoMedio.IsChecked = !radioButtomDireto.IsChecked;
                    radioButtomPercentual.IsEnabled = radioButtomPrecoMedio.IsEnabled = !radioButtomDireto.IsEnabled;

                }

                if ((bool)radioButtomPrecoMedio.IsChecked)
                {
                    radioButtomDireto.IsChecked = radioButtomPercentual.IsChecked = !radioButtomPrecoMedio.IsChecked;
                    radioButtomDireto.IsEnabled = radioButtomPercentual.IsEnabled = !radioButtomPrecoMedio.IsEnabled;

                }
            }

            if (Presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.AdministradoConcorrente)
            {

                radioButtomDireto.IsEnabled = false;
                radioButtomPercentual.IsEnabled = false;
                checkBoxPrecoMedio.IsEnabled = false; 

            }

            if (Presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
            {
                radioButtomPercentual.IsEnabled = false;

            }
        }

        public void DistribuicaoPOP()
        {
            this.CarregarNegocio();
        }
        public void ExibirMensagemSaldoCliente(string pMensagem)
        {
            SinacorMessageBox.Show(pMensagem, SinacorMessageBoxImage.Information);

        }

        #endregion

        #region ApresentacaoRegrasNegocio
        public void ConfiguraDigitacaoVazia()
        {
            this.AlteraStatusControle(true);
            this.DesabilitaColunasGridDigitacao();
            _presenter.VerificaPermissaoUsuario();
            _presenter.AtualizarQtdCasada(); 
            this.HabilitaPrecoMedio();

            this.checkBoxPrecoMedio.IsEnabled = (Presenter.TipoOrdemDistribuicao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP);  
            this.radioButtomPrecoMedio.IsChecked = true;
        }

        public void ConfiguraDigitacaoComItens()
        {
            this.DesabilitaColunasGridDigitacao();
            _presenter.VerificaMetodoDistribuicao();
            _presenter.VerificaPermissaoUsuario();
        }

        public void MercadoDerivativoNaoDerivativo()
       {
           if (Presenter.pLoteOrdem.Count == 1)
           {
               this.AlteraStatusControle(true);
               List<string> listDigitacao = new List<string>();
               listDigitacao.Add("ReducaoAcrecimoTotal");
               //  listDigitacao.Add("Carteira");
               //   listDigitacao.Add("Cliente");

               // listDigitacao.Add("IndicadorSistemaExterno");

               // listDigitacao.Add("IndicadorLiquidacaoExternoCliente");
               listDigitacao.Add("PercentualDistribuicao");
               //listDigitacao.Add("Preco");
               //listDigitacao.Add("Quantidade");
               this.ColunasLotesDigitados(listDigitacao, true);
               this.ColunasLotesDigitados("TipoLiquidacao", false);
           }

           else
           {
               configuracaoMultiploLoteColunaGrid();  
           }

        }

        private void configuracaoMultiploLoteColunaGrid()
        {
            List<string> listDigitacao = new List<string>();
            listDigitacao.Add("TipoLiquidacao");
            listDigitacao.Add("ClienteInstitucional");
            listDigitacao.Add("UsuarioInstitucional");
            listDigitacao.Add("DigitoVerificadorClienteInstitucional");
            listDigitacao.Add("Carteira");

            this.ColunasLotesDigitados(listDigitacao, false);

        }
        public void MercadoDerivativo()
        {
            if (Presenter.pLoteOrdem.Count == 1)
            {
            this.AlteraStatusControle(true);
            List<string> listDigitacao = new List<string>();
            listDigitacao.Add("TipoLiquidacao");
            listDigitacao.Add("DigitoVerificadorClienteInstitucional");
            listDigitacao.Add("ClienteInstitucional");
            listDigitacao.Add("UsuarioInstitucional");
            this.ColunasLotesDigitados(listDigitacao, false);
            } 
            else
           {
               configuracaoMultiploLoteColunaGrid();  
           }
            
        }

        public void MercadoNaoDerivativo()
        {
            if (Presenter.pLoteOrdem.Count == 1)
            {
                this.AlteraStatusControle(true);
                List<string> listDigitacao = new List<string>();
                listDigitacao.Add("TipoLiquidacao");
                listDigitacao.Add("UsuarioInstitucional");
                listDigitacao.Add("ClienteInstitucional");
                listDigitacao.Add("DigitoVerificadorClienteInstitucional");
                this.ColunasLotesDigitados(listDigitacao, true);
                _presenter.ConsultarMenorCarteria();
            }
            else
            {
                configuracaoMultiploLoteColunaGrid();
            }

        }

        public void AlterarStatusControle()
        {
            StatusValueRadioButtomPercentual(_presenter.blPercentual);
            StatusValueRadioButtomPrecoMedio(_presenter.blPrecoMedio);
            StatusValueRadioButtomDistribuicaoDireto(_presenter.blDireto);
            if (_presenter.blPercentual == true)
                this.HabilitaGridDigitacaoPercentual();
            if (_presenter.blDireto == true)
                this.HabilitaGridDigitacaoDireto();
            if (_presenter.blPrecoMedio == true)
                this.HabilitaGridPrecoMedio();

        }

        public void DistribuicaoPercentualPadrao()
        {
            this.AtivaPercentual();
            if (Presenter.pLoteOrdem.Count <=1) 
                ColunasLotesDigitados("Carteira", true);
            this.CarregarNegocio();
        }

        public void DesabilitaCheckBoxContaInvestimento()
        {
            checkBoxContaInvestimento.IsChecked = false;
            checkBoxContaInvestimento.IsEnabled = false;
        }

        public void DesabilitaCheckBoxUtilizaCVM()
        {
            checkBoxUtilizaCodigoCVM.IsChecked = false;
            checkBoxUtilizaCodigoCVM.IsEnabled = false;
        }

        public void DesabilitarColReducaoAcrescimo()
        {
            ColunasLotesDigitados("ReducaoAcrecimoTotal", false);

        }

        public void HabilitarColReducaoAcrescimo()
        {
            ColunasLotesDigitados("ReducaoAcrecimoTotal", true);
        }

        public void ColunasGridDigitacaoKernelPlus()
        {

            dtgDistribuicao.Columns["IndicadorLiquidacaoExternoCliente"].Visible = moduloPlus;
            dtgDistribuicao.Columns["IndicadorSistemaExterno"].Visible = moduloPlus;
        }
        public void MostrarPercentualAcrescimo()
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (this.Presenter.blInserir == false)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    RegAtual.PercentualAcrescimo = this.Presenter.ModelClienteDigitacao.PercentualReducaoAcrescimo;
                   // dtgDistribuicao.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
                }
            }
        }

        #endregion


        #endregion


        #endregion

        private void dtgDistribuicao_InsertBegun(object sender, ItemEventArgs e)
        {
            
            if (e.OriginalSource is BaseRow)
            {
                Presenter.HabilitarConsultaCliente(true); 


                Presenter.ApelidoAtual = null; 

                Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                if (this.Presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                    RegAtual.TipoLiquidacao = Model.Enum.TipoLiquidacaoDistribuicao.Normal;

                if (this.Presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.AdministradoConcorrente)
                    RegAtual.TipoLiquidacao = Model.Enum.TipoLiquidacaoDistribuicao.Custodiante;


                this.ColunasLotesDigitados("DigitoVerificadorCliente", this.Presenter.HabilitarDigitacaoDigitoCliente);


                
                if (dtgDistribuicao.GetInsertionRow() != null)
                {
                    SinacorInt16TextBox txtDigitoVerificador = new SinacorInt16TextBox(); 

                    txtDigitoVerificador = (SinacorInt16TextBox)ControlHelper.FindChild(
                                        dtgDistribuicao.GetInsertionRow(),
                                        "txtDigitoVerificador");

                    if (txtDigitoVerificador != null)
                    {
                        txtDigitoVerificador.IsEnabled = this.Presenter.HabilitarDigitacaoDigitoCliente;
                        txtDigitoVerificador.IsRequired = this.Presenter.HabilitarDigitacaoDigitoCliente;

                        if (this.Presenter.HabilitarDigitacaoDigitoCliente)
                            txtDigitoVerificador.RequiredErrorMessage = "Bovespa.Ordens.Message.DigitoClienteObrigatorio";
                        
                        txtDigitoVerificador.UpdateTarget(SinacorInt16TextBox.IsEnabledProperty);
                    }
                    SinacorInt32TextBox txtCarteira = new SinacorInt32TextBox();


                    txtCarteira = (SinacorInt32TextBox)ControlHelper.FindChild(
                    dtgDistribuicao.GetInsertionRow(),
                    "txtCarteira");
                    if (txtCarteira != null)
                    {

                        txtCarteira.IsEnabled = (this.Presenter.pLoteOrdem.Count == 1);
                        if (Presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                            txtCarteira.IsEnabled = false; 
                        txtCarteira.UpdateTarget(SinacorInt16TextBox.IsEnabledProperty);
                    }
                    SinacorTextBox auxSinacor;
                    auxSinacor = (SinacorTextBox)ControlHelper.FindChild(dtgDistribuicao.GetInsertionRow(), "txtTipoLiquidacao");
                    if (auxSinacor != null && _presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                    {
                        auxSinacor.IsEnabled = false;

                        auxSinacor.UpdateLayout();
                    }
                    else
                    {
                        if (auxSinacor != null)
                        {
                            auxSinacor.IsEnabled = true;

                            auxSinacor.UpdateLayout();
                        }
                    }
                }

                //Método que verifica se Cliente e dígito já estão
                //preenchidos e joga o foco no próximo campo.
                FocoCampoDepoisDigito(RegAtual);

            } 
        }

        private void FocoCampoDepoisDigito(Model.BaseDigitacao RegAtual)
        {
            //Boolean focoProximo = false;
            //String nomeCampo = "";
            //BUG 7452 - vvanalli.7comm
            //Alteração para, no momento de uma nova distribuição, verificar
            //se a ordem já tem o Cliente / Dígito preenchidos e pular estes campos.
            SinacorTextBox txtApelidoCliente = (SinacorTextBox)ControlHelper.FindChild(this.dtgDistribuicao.GetEditRow(), "txtApelidoCliente");
            SinacorInt16TextBox txtDigito = (SinacorInt16TextBox)ControlHelper.FindChild(this.dtgDistribuicao.GetEditRow(), "txtDigitoVerificador");

            #region Habilita/Desabilita campos Apelido e Dígito

            if (!String.IsNullOrEmpty(RegAtual.ApelidoCliente) && RegAtual.ApelidoCliente.Length > 0)
            {
                if (txtApelidoCliente != null)
                {
                    txtApelidoCliente.IsEnabled = false;
                    txtApelidoCliente.UpdateLayout();
                    txtApelidoCliente.Validate();

                    if (txtDigito != null)
                        txtDigito.Validate();

                    Presenter.ValidarCliente(false);
                    txtApelidoCliente_LostFocus(null, null);
                }

                dtgDistribuicao.UpdateLayout();
            }

            if (RegAtual.DigitoVerificadorCliente.HasValue)
            {
                if (txtDigito != null)
                {
                    txtDigito.IsEnabled = false;
                    txtDigito.IsRequired = false;
                    txtDigito.UpdateLayout();
                }

                if ((bool)radioButtomDireto.IsChecked)
                {
                    ((SinacorDecimalTextBox)ControlHelper.FindChild(this, "txtPrecoInformado")).Focus();
                }
                else if ((bool)radioButtomPercentual.IsChecked)
                {
                    ((SinacorDecimalTextBox)ControlHelper.FindChild(this, "txtPorcentualDistribuicao1")).Focus();
                }
                else
                {
                    ((SinacorDecimalTextBox)ControlHelper.FindChild(this, "txtGridQTDDestinadaCliente")).Focus();
                }
            }           

            #endregion

            #region Põe o foco no campo

            if (txtDigito != null)
            {
                //Primeiro verifico se o dígito não está preenchido e ponho o foco nele
                if (txtDigito.IsEnabled && !RegAtual.DigitoVerificadorCliente.HasValue)
                {
                    txtDigito.Focus();
                }
            }

            //Depois verifico se o Apelido não está preenchido e ponho o foco nele
            if (String.IsNullOrEmpty(RegAtual.ApelidoCliente) && txtApelidoCliente.IsEnabled)
            {
                txtApelidoCliente.Focus();
            }

            #endregion
        }

        private Model.BaseDigitacao GetPreviousRowModel()
        {
            Model.BaseDigitacao model = null;

            if (this.dtgDistribuicao.Items.Count > 0)
            {
                model = (Model.BaseDigitacao)this.dtgDistribuicao.Items[0];
            }

            return model;
        }

        private void dtgDistribuicao_Deleted(object sender, ItemsEventArgs e)
        {

                _presenter.AtualizaValores();
                dtgDistribuicao.SelectedIndex = -1; 
        }

        private void dtgDistribuicao_UndoingAll(object sender, CancelItemsEventArgs e)
        {
            this.ShowUserWaitingProcess();
            if (this.Presenter.ListDigitacao.Count == 0)
            {
                this.ShowUserWaitingProcess();
                HabilitaPrecoMedio();
                HabilitarRadioButtomDistribuicaoDireto(true);
                HabilitarRadioButtomPercentual(true);
                HabilitarRadioButtomPrecoMedio(true);
                this.DesabilitarColunasInsercao();
                this.HideUserWaitingProcess();

                
            }
            this.Presenter.AtualizaValores();
            this.verificarMultiploLote(); 
            this.HideUserWaitingProcess();
            Presenter.HabilitarConsultaCliente(false); 
        }

        private void EventValidationRule_QuantidadeTotalPreenchida(object sender, Sinacor.Infra.UI.Controls.SmartClient.Validation.ValidatingEventArgs e)
        {
            e.Result = ValidationResult.ValidResult;
            if (this.dtgDistribuicao.EditItem != null)
            {
                
                if (e.Value != null)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    bool novo = (dtgDistribuicao.EditIndex == -1);
                    if (!_presenter.ValidaQtdTotalDigitada(novo, Convert.ToDecimal(e.Value), RegAtual,dtgDistribuicao.EditSourceIndex ))
                        e.Result = new ValidationResult(false, null);

                }

            }

        }

        private void dtgDistribuicao_UpdateEnded(object sender, ItemEventArgs e)
        {
            if (this.dtgDistribuicao.EditItem != null)
            {
                if (e.OriginalSource is BaseRow)
                {
                    Model.BaseDigitacao RegAtual = (Model.BaseDigitacao)this.dtgDistribuicao.EditItem;
                    RegAtual.UtilizaContaInvestimento = checkBoxContaInvestimento.IsChecked;
                    _presenter.AtualizaValores();
                    this.verificarMultiploLote();
                    if ((RegAtual.TipoLiquidacao == null || RegAtual.TipoLiquidacao == Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal) && !Presenter.Derivativo)
                    {
                        RegAtual.CodigoClienteCustodia = null;
                        RegAtual.CodigoAgenteCustodia = null;
                        RegAtual.DigitoClienteCustodiaDigitacao = null;
                    }
                }

                inserido = false;
                dtgDistribuicao.SelectedIndex = -1; 
                Presenter.HabilitarConsultaCliente(false); 
            }
        }

        private void dtgDistribuicao_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {


        }

        private void dtgDistribuicao_BeingUpdated(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors(); 
                this.ShowUserWaitingProcess();
                this.Presenter.retorno = null; 
                e.Cancel = (((Model.BaseDigitacao)this.dtgDistribuicao.EditItem).State == State.Deleted);
                this.ColunasLotesDigitados("DigitoVerificadorCliente", this.Presenter.HabilitarDigitacaoDigitoCliente);

                this.ColunasLotesDigitados("Cliente", true);

                SinacorTextBox txtApelidoCliente = (SinacorTextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtApelidoCliente");

                if (txtApelidoCliente != null)
                {
                    txtApelidoCliente.IsEnabled = true;
                    txtApelidoCliente.UpdateLayout();
                }

                this.AlterarStatusControle();
                _presenter.VerificaPermissaoUsuario();

                Presenter.ApelidoAtual = ((Ordens.Model.BaseDigitacao)this.dtgDistribuicao.EditItem).ApelidoCliente;
                bool habilitado = (((Ordens.Model.BaseDigitacao)this.dtgDistribuicao.EditItem).TipoLiquidacao != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoLiquidacaoDistribuicao.Normal);


                if (!habilitado)
                    CamposInstitucionais(false);
                else
                    if (habilitarColunas)
                        CamposInstitucionais(true);

                ColunasLotesDigitados("PercentualDistribuicao", dtgDistribuicao.Columns["PercentualDistribuicao"].Visible);
                ColunasLotesDigitados("Preco", dtgDistribuicao.Columns["Preco"].Visible);
                ColunasLotesDigitados("Quantidade", dtgDistribuicao.Columns["Quantidade"].Visible);
                
                if (_presenter.TipoOrdemDistribuicao == Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoOrdemDistribuicao.POP)
                {
                    SinacorTextBox auxSinacor = (SinacorTextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtTipoLiquidacao");

                    if (auxSinacor != null)
                    {
                        auxSinacor.IsEnabled = false;

                        auxSinacor.UpdateLayout();
                    }

                    SinacorInt32TextBox txtCarteira = (SinacorInt32TextBox)ControlHelper.FindChild(dtgDistribuicao.GetRow(dtgDistribuicao.EditIndex), "txtCarteira");
                    if (txtCarteira != null)
                    {
                        txtCarteira.IsEnabled = false;
                        txtCarteira.UpdateLayout();
                        txtCarteira.IsEnabled = (this.Presenter.pLoteOrdem.Count == 1);
                    }
                }

                if (this._presenter.ContemNovoMercado)
                {
                    this.dtgDistribuicao.Columns["Cliente"].AllowUpdate = false;
                }
                else
                {
                    this.dtgDistribuicao.Columns["Cliente"].AllowUpdate = true;
                }

                this.HideUserWaitingProcess(); 

            }
        }

        private void dtgDistribuicao_CancelingUpdate(object sender, CancelItemEventArgs e)
        {
            this.Presenter.HabilitarConsultaCliente(false);
           
        }


        private void dtgDistribuicao_CurrentCellChanged(object sender, CurrentCellChangedEventArgs e)
        {
            if (dtgDistribuicao.EditIndex > -1)
            {
                if (e.NewCell.Row.Index != dtgDistribuicao.EditIndex)
                {
                    dtgDistribuicao.EndUpdate();
                    dtgDistribuicao.SelectedIndex = e.NewCell.Row.Index;

                }
            }
        }


        private void dtgDistribuicao_KeyDown(object sender, KeyEventArgs e)
        {
            //if (e.Key == Key.Down)
            //{
            //    dtgDistribuicao.EndUpdate();
            //    dtgDistribuicao.SelectedIndex += 1;
            //}

        }

        private void dtgDistribuicao_KeyUp(object sender, KeyEventArgs e)
        {
            //if (e.Key == Key.Up)
            //{
            //    dtgDistribuicao.EndInsert();
            //    if (dtgDistribuicao.SelectedIndex != 0)

            //        dtgDistribuicao.SelectedIndex -= 1;
            //}
        }







        #region teste



        #endregion































    }
}
